package com.cuit.mimall.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.cuit.mimall.common.R;
import com.cuit.mimall.entity.Product;
import com.cuit.mimall.mapper.ProductMapper;
import com.cuit.mimall.service.IProductService;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * <p>
 * 服务实现类
 * </p>
 *
 * @author TeaWu
 * @since 2023-07-02
 */
@Service
public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> implements IProductService {

    /**
     * 分页查询商品列表
     *
     * @param pageNum  页码
     * @param pageSize 每页数量
     * @return R<?>
     */
    @Override
    public R<?> getAll(Integer pageNum, Integer pageSize) {
        Page<Product> page = new Page<>(pageNum, pageSize);
        return R.ok(baseMapper.selectPage(page, null));
    }

    /**
     * @param product 商品信息
     * @return R<?>
     */
    @Override
    public R<?> add(Product product) {
        if (super.save(product)) {
            return R.ok("添加成功");
        } else {
            return R.fail("添加失败");
        }
    }

    /**
     * 修改商品
     *
     * @param product 商品信息
     * @return R<?> 更新结果
     */
    @Override
    public R<?> update(Product product) {
        if (super.updateById(product)) {
            return R.ok("更新成功");
        } else {
            return R.fail("更新失败");
        }
    }

    /**
     * 删除商品
     *
     * @param ids 商品id数组
     * @return R<?>
     */
    @Override
    public R<?> delete(Integer[] ids) {
        try {
            for (Integer id : ids) {
                super.removeById(id);
            }
        } catch (Exception e) {
            return R.fail("删除失败");
        }
        return R.ok("删除成功");
    }

    /**
     * @param categoryId 分类id
     * @param pageNum    页码
     * @param pageSize   每页数量
     * @return R<?> 商品列表
     */
    @Override
    public R<?> getProductsByCategory(Integer categoryId, Integer pageNum, Integer pageSize) {
        Page<Product> page = new Page<>(pageNum, pageSize);
        QueryWrapper<Product> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("category_id", categoryId);
        queryWrapper.eq("product_status", 0);
        return R.ok(baseMapper.selectPage(page, queryWrapper));
    }

    /**
     * @return List<Integer>
     */
    @Override
    public List<Integer> selectIds() {
        return null;
    }
}
